// 目录操作 
const fs = require('fs');
const path = require('path')
// fs.existsSync  fs.access  fs.stat  都可以判断文件的存在性 fs.stat用的比较多
// fs.existsSync  
// fs.access  
// fs.stat 获取文件或目录的信息，
// fs.mkdir 异步创建目录api 

// function mkdir(filePath,callback){
//     let index = 1;
//     let dirs = filePath.split('/')
//     console.log(dirs);
//     function next(){
//         if(index == dirs.length+1) return callback()
//         let currentPath = dirs.slice(0,index++).join('/')
//         fs.stat(currentPath,function(err){
//             if(err){
//                 fs.mkdir(path.resolve(__dirname,currentPath),function(err){
//                     if(err)return callback(err)
//                     next()
//                 })
//             }else {
//                 return next()
//             }
            
//         })

//     }
//     next()
// }
function mkdir(filePath,callback){
    let index = 1;
    let dirs = filePath.split('/')
    function next(){
        if(index == dirs.length+1) return callback()
        let currentPath =  dirs.slice(0,index++).join('/')
        fs.stat(path.resolve(__dirname,currentPath),function(err){
            if(err){
                fs.mkdir(path.resolve(__dirname,currentPath),function(err){
                    if(err)callback(err)
                    next()
                })
            }
        })
    }
    next()
}


mkdir('a/b/c/d',function(err){
    console.log(err)
})

// fs.rmdir  删除目录 (默认支持递归删除)
// fs.rmdirSync 同步删除目录
// fs.readdir 读取子目录
// isDirectory 是否是目录
// isFile 是否是文件
// fs.unlink
// fs.unlinkSync(item)同步删除文件
/* function mrdir1(){
    dirs = fs.readdirSync('a') // 只能读取子目录
    dirs = dirs.map((item)=>path.join('a',item));
    dirs.forEach(item=>{
        let statObj = fs.statSync(item);
        if(statObj.isDirectory()){
            fs.rmdirSync(item)
        }else{
            fs.unlinkSync(item);
        }
    });
    fs.rmdirSync('a')
}
mrdir1() */



/* let { stat, unlink, readdir, rmdir } = require('fs').promises;
async function rmdir4(dir) {
    let statObj = await stat(dir)  // 如果是文件 删除即可
    if (statObj.isFile()) {
        await unlink(dir)
    } else {
        let dirs = await readdir(dir);
        // 删除完毕儿子后 删除自己
        await Promise.all(dirs.map(item => rmdir4(path.join(dir, item))))
        await rmdir(dir);
    }
} */
// rmdir4('a').then(() => {
//     console.log('ok 删除成功')
// }).catch(err=>{
//     console.log(err)
// })



/* function rmdir5(dir){
    let stack = [dir]
    let index = 0
    let current
    while (current = stack[index++]) {
        let stats = fs.statSync(current);
        if (stats.isDirectory()) {
            stack = [...stack, ...fs.readdirSync(current).map(item => path.join(current, item))]
        }
    }
    index = stack.length - 1
    while (index>=0) {
        let current = stack[index--];
        let stats = fs.statSync(current)
        if (stats.isDirectory()) {
            fs.rmdirSync(current);
        } else {
            fs.unlinkSync(current)
        }
    }
}
rmdir5('a') */
